<?php
class Shop_CheckoutController extends Zend_Controller_Action {
	
	public $skin = array(
		'layout' => 'shop_checkout'
	);

	public function init() 
	{
		$this->view->config = $this->_helper->config('config.ini')->checkout;
	}

	/**
	 * @var Shop_Model_Cart
	 */
	protected $_cart;

	public function preDispatch() 
	{
		$this->_cart = Shop_Model_Cart::getInstance();
		// brak kszyków w zamówieniu
		if (!$this->_cart->hasProducts()) 
		{
			/* @var Zend_Controller_Action_Helper_Redirector */
			$redirector = $this->_helper->getHelper('Redirector');
			$redirector->goTo('display', 'category');
			return;
		}
	}
	
	/**
	 * Wybór metody płatności
	 * @return void
	 */
	public function indexAction() 
	{
		/* @var $rq Zend_Controller_Request_Http */
		$rq = $this->getRequest();

		$this->view->form = new Shop_Form_Checkout_Checkout();
		
		if (!$rq->isPost()) 
		{
			$this->view->form->setDefaults($this->_cart->getUserData());
			return;
		}

		if (!$this->view->form->isValid($rq->getPost())) 
		{
			return;
		}

		// dane przekazywane do widoku, w celu wyrenderowania informacji!
		$this->view->products 	= $this->_cart->getProducts();
		$this->view->totalPrice = $this->_cart->getTotalPrice();
		
		$data = $this->view->form->getValues();
		$html = $this->view->render('checkout/send-mail.phtml');
		$config = $this->_helper->config('checkout.ini');
		
		
		if (!Zend_Session::isStarted())
		{
			Zend_Session::start();
		}
		
		$userData = $this->view->form->getValues();
		$userData['amount'] = $this->_cart->getTotalPrice();
		$userData['session_id'] = Zend_Session::getId();

		$order = new Shop_Model_Order();
		$orderId = $order->add($this->view->form->getValues(),
									$this->_cart->getTotalPrice(), 
									Zend_Session::getId(),
									$html,
									$userData['email']);

		if (Shop_Model_Order::SUCCESS !== $order->getStatus()) 
		{
			// powórt do formularza
			$message = 'Wystąpił problem z połączeniem z bazą danych, proszę spróbuj jeszcze raz!';
			$flashMessanger->addMessage($message);
			return;
		}

		
		$userData['orderId'] = $orderId;

		$this->_cart->setUserData($userData);
		
		$subject = sprintf('Zamówienie [%s%s%s/%s]', date('Y'), date('m'), date('d'), $userData['orderId']);

		// wysyłanie maila
		$model = new Default_Model_Mail();
		$model->setSubject($subject);
		$model->setConfig($config->zamowienie);
		$model->send($data,$html);

		/* @var $flashMessanger Zend_Controller_Action_Helper_FlashMessenger */
		$flashMessanger = $this->_helper->getHelper('flashMessenger');

		if (Default_Model_Mail::SUCCESS !== $model->getStatus())
		{
			// powórt do formularza
			$message = 'Wiadomość NIE została wysłana!';
			$flashMessanger->addMessage($message);

			// dodawanie wiadomości z modelu @todo dodać do logowania
			array_map(array($flashMessanger, 'addMessage'), $model->getMessages(true));
			return;
		}
		
		
		if ((bool) $this->_helper->config->config('config.ini')->payments->isActive)
		{
			// przekierowanie do strony płatności internetowych
			$this->_helper->redirector->gotoRoute(array(),'shop-payments');
		} else 
		{
			// wiadomość o powodzeniu akcji
			$message = sprintf('Wiadomość została wysłana na adres: %s', $data['email']);
			$flashMessanger->addMessage($message);

			// przekierowanie do strony potwierdzającej płaności
			$this->_helper->redirector->goTo('success');
		}
	}
	
	public function successAction() 
	{
		$cart = Shop_Model_Cart::getInstance();
		
		// tylko gdy uzytkownik wypełnił dane
		$userData = $cart->getUserData();
		$this->_helper->redirectUntil->gotoRouteUntil($userData, array(),'shop-checkout');

		// dane przekazywane do widoku, w celu wyrenderowania informacji!
		$this->view->products 	= $this->_cart->getProducts();
		$this->view->totalPrice = $this->_cart->getTotalPrice();
	}
}